#include<iostream>
#include <cstdarg>
#include <memory>
#include <functional>

//C++可变参数

void myprintf()
{
	std::cout<<std::endl;
}
template<typename T,typename ...ARGS>
void myprintf(const T& value,ARGS&&...args)
{
 std::cout<<value;
 if((sizeof...(args))>0) myprintf(std::forward<ARGS>(args)...);
else myprintf();

}
int main(){
 myprintf("你好");
 myprintf("你好","加油");
 myprintf("你好","加油",666);
	return 0;
}




//#define LOG(fmt,...) printf("[%s,%d]"fmt,__FILE__,__LINE__,##__VA_ARGS__);//
//应对单类型
// void printNum(int n,...) //n是几个参数的意思
// {
// 	va_list ap;
// 	va_start(ap,n);//让ap指向n之后的第一个可变参数
// 	for(int i=0;i<n;i++)
// 	{
// 		int num=va_arg(ap,int);//从可变参数中取出一个整形
// 		printf("%d",num);
// 	}
// 	printf("\n");
// 	va_end(ap);
// }
//C语言版不定参数

//应对多类型
// void myprint(const char* fmt,...)
// {
//  va_list ap;
// va_start(ap,fmt);

// char* res;
// int ret=vasprintf(&res,fmt,ap);//用于处理传不同类型的
// if(ret!=-1) {
// 	printf(res);
// 	free(res);//不能忘 这是用vasprintf的必要要求
	
// }
// va_end(ap);
// }